/*
 * @Description: 
 * @Author: menglong.du
 * @Date: 2021-12-05 13:12:24
 * @LastEditTime: 2021-12-05 18:09:19
 * @LastEditors: menglong.du
 */
// 你的任务是计算 ab 对 1337 取模，a 是一个正整数，b 是一个非常大的正整数且会以数组形式给出。
// 输入：a = 2, b = [3]
// 输出：8

// 思路
void main() {
    double pow (a,b) {
    double ans = 1;
    while(b!=0) {
      if(b%2!=0) {
        ans = ans * a % 1337;
      }
      a = a*a%1337;
      b>>=1;
    }
    return ans;
  }
  double superPow (a,n) {
    double ans = 1;
    for(var i =n.length-1;i>=0;i--){
      ans = ans * pow(a,n[i]);
       a = pow(a,10);
    }

    return ans;
  }
  print(superPow(2,[3,2]));
} 
// void main() {
//   BigInt pow(BigInt a, b) {
//     var ans = BigInt.from(1);
//     while (b != 0) {
//       if (b % 2 != 0) {
//         ans = ans * a % BigInt.from(1337);
//       }
//       a = a * a % BigInt.from(1337);
//       b >>= 1;
//     }
//     return ans;
//   }

//   BigInt superPow(a, n) {
//     BigInt ans = BigInt.from(1);
//     for (var i = n.length - 1; i >= 0; i--) {
//       ans = ans * pow(a, n[i]) % BigInt.from(1337);
      
//       a = pow(a, 10);
//     }
//     return ans;
//   }

//   print(superPow(2, [3, 2]));
// }